// 发布订阅模式

class EventEmitter {
    constructor() {
        // 准备一个事件中心
        this.events = {} // key: cb[]
    }

    // 发布, 去触发订阅的数据
    publish(eventName, ...args) {
        if (this.events[eventName]) {
            // 将对应名称的事件都执行
            this.events[eventName].forEach(cb => cb.apply(this, ...args))
        }
    }

    // 订阅, 类似于绑定函数
    subscribe(eventName, callback) {
        if( this.events[eventName] ){
            this.events[eventName].push(callback)
        } else {
            this.events[eventName] = [callback]
        }
    }

    // 取消订阅
    unSubscribe(eventName, callback) {
        if(this.events[eventName]){
            this.events[eventName] = this.events[eventName].filter((cb) => cb !== callback)
        }
    }
}
